// 给你一个已按非递减顺序排列的整数数组 numbers，请你从数组中找出两个数，使它们的和等于目标数 target。返回这两个数的下标（下标从 1 开始）。

// 你只能使用常数级额外空间。

// 示例：
// 输入：numbers = [2,7,11,15], target = 9
// 输出：[1,2]
// 解释：2 + 7 = 9，返回下标 [1,2]
// 这个是在数组中找出有多少组元素加起来是目标值，结果返回数组的下标
const twoSum2 = (nums, target) => {
    let left = 0
    let right = nums.length - 1
    const res = []
    for (let i = 0; i < nums.length; i++) {
        if (nums[i] === nums[i + 1]) continue
        while (left < right) {
            const sum = nums[left] + nums[right]
            if (sum === target) {
                res.push([left + 1, right + 1])
                while (left < right && nums[left] === nums[left + 1]) left++
                while (left < right && nums[right] === nums[right - 1]) right--
                left++;
                right--;

                // return [left + 1, right + 1]
            } else if (sum > target) {
                right--
            } else {
                left++
            }
        }
    }
    console.log(res);

    return []

}
const nums = [2, 4, 5, 6, 7]
const target = 9
const res2 = twoSum2(nums, target)
console.log(res2);

const twoSum = (nums, target) => {
    const hasMap = new Map();
    for (let i = 0; i < nums.length; i++) {
        const currentNum = nums[i]
        const complement = target - currentNum
        if (hasMap.has(complement)) {
            return [hasMap.get(complement) + 1, i + 1]
        }
        hasMap.set(currentNum, i)
    }
}

const res = twoSum(nums, target)
console.log(res);
